<%@ page import="tech.aistar.day01.User" %><%--
    动作的意义是替代代码块的<% code block %>
    为了让jsp不要出现大量的java代码，退出来了active
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>jsp动作 -useBean</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>

<%--    jsp脚本元素 - 代码块--%>
    <%
        User user=new User();
        user.setUserName("admin");

        //如果希望能够通过EL表达式能够获取到此处的user
        //一定要把user放入到作用域中

        //目前内置对象 - request,response,page,session,application,exception,out
        //request也是属于jsp内置对象
        request.setAttribute("user",user);
    %>

<%--    id代表对象的唯一标志名 - 对象的名称
    jsp动作的代码也是存在于_jspService方法内部的

    底层通过反射技术来空参构造...

    jsp有四大作用域
    1.page作用域 - 仅仅在当前jap文件中有效
    - 对应servlet的三大作用域

    2.request作用域-
    3.session作用域
    4.application作用域(SerletContext对象)
    jsp:uerBean这个动作默认会将创建出来的对象放入到最小作用域page作用域中，>
    可以通过scope属性来将对象放入到指定的作用域中
--%>

    <jsp:useBean id="u" class="tech.aistar.day01.User" scope="request"></jsp:useBean>

<%--    setProperty指令

        property="userName"
        底层肯定是通过反射的技术userName -> setUserName->Method->invoke方法...

    --%>

    <jsp:setProperty name="u" property="userName" value="tom"></jsp:setProperty>

    <jsp:getProperty name="u" property="userName"/>

    <br>

    <%--    传统的jsp-脚本-表达式(输出语句)--%>
    <%=user%>
    <br>
    <%=u%>

    <hr>

    <%--    jsp可以使用EL表达式来获取作用域中的数据并且进行输出
            EL表达式只能获取作用域中的数据
            --%>
    <%--    ${作用域中的key}--%>
    ${user}
    <br>
    ${u}
    <br>
    <%--    对象.属性.属性.属性 -> OGNL 对象导航语言--%>
    ${u.userName}
</body>
</html>
